﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gacn.ControleAlunos.Library.DataAccess;
using System.Data;
using System.Collections.Specialized;
using Gacn.ControleAlunos.Library.Entities;

namespace Gacn.ControleAlunos.Library.Business
{
    public class RelatorioBiz
    {
        public static int QtdePresencaDaDataPorEscola(DateTime data, int EscolaID)
        {
            int qtde = 0;
            List<DateTime> datas = new List<DateTime>();

            DataTable dt = RelatorioDataAccess.PresencasDoDia(data);

            foreach (DataRow row in dt.Rows)
            {
                if (data.Date == DateTime.Parse(row["dtHrPresenca"].ToString()).Date
                    && EscolaID == int.Parse(row["idEscola"].ToString()))
                    qtde++;
            }

            return qtde;
        }

        public static OrderedDictionary QtdePresencaDasTurmasPorData(DateTime data)
        {
            OrderedDictionary presencas = new OrderedDictionary();
            DataTable dt = RelatorioDataAccess.PresencasDoDia(data);
            int i = 0;

                foreach (DataRow row in dt.Rows)
                {
                    if (presencas.Count == 0)
                        presencas.Add(row["CodTurma"], 1);
                    else
                        if (presencas.Contains(row["CodTurma"]))
                        {
                            i = (int)presencas[row["CodTurma"]];
                            presencas.Remove(row["CodTurma"]);
                            presencas.Add(row["CodTurma"], ++i);
                        }
                        else
                            presencas.Add(row["CodTurma"], 1);
                }
            
            return presencas;
        }

        public static SortedDictionary<string, int> PresencaDasTurmasPorDataPorEscola(DateTime data, int EscolaID)
        {
            SortedDictionary<string, int> presencas = new SortedDictionary<string, int>();
            DataTable dt = RelatorioDataAccess.PresencasPorDataPorEscola(data, EscolaID);

            foreach (DataRow row in dt.Rows)
            {
                if (presencas.Count == 0)
                    presencas.Add(row["CodTurma"].ToString(), 1);
                else
                    if (presencas.Keys.Contains(row["CodTurma"].ToString()))
                        ++presencas[row["CodTurma"].ToString()];

                    else
                        presencas.Add(row["CodTurma"].ToString(), 1);
            }

            return presencas;
        }

        public static List<DateTime> DatasDeAulaDoAno(int ano)
        {
            List<DateTime> datas = new List<DateTime>();

            DataTable dt = RelatorioDataAccess.DatasDeAulaDoAno(ano);

            foreach (DataRow row in dt.Rows)
                datas.Add((DateTime)row["dtPresenca"]);

            return datas;
        }

        public static List<AlunoDetalhadoEntity> GetAllAlunoDetalhado()
        {
            List<AlunoDetalhadoEntity> alunos = new List<Entities.AlunoDetalhadoEntity>();

            DataTable dt = AlunoDataAccess.GetAllAlunoDetalhado();
            foreach (DataRow row in dt.Rows)
            {

                AlunoDetalhadoEntity aluno = new AlunoDetalhadoEntity();

                aluno.ID = (int)row["idPessoa"];

                if (row["DtNasc"] != DBNull.Value)
                    aluno.Nascimento = DateTime.Parse(row["DtNasc"].ToString());

                if (row["Sexo"] != DBNull.Value)
                    aluno.Sexo = char.Parse(row["Sexo"].ToString());

                if (row["nrSapato"] != DBNull.Value)
                    aluno.NumeroSapato = int.Parse(row["nrSapato"].ToString());

                if (row["nrFone"] != DBNull.Value)
                    aluno.Telefone = double.Parse(row["nrFone"].ToString());

                if (row["nrFone2"] != DBNull.Value)
                    aluno.Telefone2 = double.Parse(row["nrFone2"].ToString());

                if (row["nrRA"] != DBNull.Value)
                    aluno.RA = double.Parse(row["nrRA"].ToString());

                if (row["nrRoupaBaixo"] != DBNull.Value)
                    aluno.RoupaBaixo = (string)row["nrRoupaBaixo"];

                if (row["nrRoupaCima"] != DBNull.Value)
                    aluno.RoupaCima = (string)row["nrRoupaCima"];

                if (row["NomePessoa"] != DBNull.Value)
                    aluno.NomePessoa = (string)row["NomePessoa"];

                if (row["CodTurma"] != DBNull.Value)
                    aluno.TurmaCod = (string)row["CodTurma"];

                if (row["idTurma"] != DBNull.Value)
                    aluno.TurmaID = (int)row["idTurma"];

                if (row["idEscola"] != DBNull.Value)
                    aluno.EscolaID = (int)row["idEscola"];

                if (row["NomeEscola"] != DBNull.Value)
                    aluno.EscolaNome = (string)row["NomeEscola"];

                if (row["idCurso"] != DBNull.Value)
                    aluno.CursoID = (int)row["idCurso"];

                if (row["NomeCurso"] != DBNull.Value)
                    aluno.CursoNome = (string)row["NomeCurso"];

                if (row["Email"] != DBNull.Value)
                    aluno.Email = (string)row["Email"];

                if (row["obs"] != DBNull.Value)
                    aluno.Observacao = (string)row["obs"];

                if (row["aluSerie"] != DBNull.Value)
                    aluno.Serie = (string)row["aluSerie"];

                if (row["TotalPresencas"] != DBNull.Value)
                    aluno.QtdPresencas = (int)row["TotalPresencas"];

                alunos.Add(aluno);
            }
            return alunos;
        }

        public static string DadosAlunosParaCrachaEmCSV()
        {
            return Util.DataTableToCSV(RelatorioDataAccess.DadosAlunosParaCracha());
        }

    }
}
